home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import gtk.glade as gtk
- import cups
- from gettext import gettext as _
- import ppdippstr
-
- def OptionWidget(option, ppd, gui, tab_label = None):
- '''Factory function'''
- ui = option.ui
- if ui == cups.PPD_UI_BOOLEAN and len(option.choices) != 2:
- print 'Treating Boolean option %s as PickOne' % option.keyword
- ui = cups.PPD_UI_PICKONE
-
- if ui == cups.PPD_UI_BOOLEAN:
- return OptionBool(option, ppd, gui, tab_label = tab_label)
- if ui == cups.PPD_UI_PICKONE:
- return OptionPickOne(option, ppd, gui, tab_label = tab_label)
- if ui == cups.PPD_UI_PICKMANY:
- return OptionPickMany(option, ppd, gui, tab_label = tab_label)
-
-
- class Option:
-
- def __init__(self, option, ppd, gui, tab_label = None):
- self.option = option
- self.ppd = ppd
- self.gui = gui
- self.enabled = True
- self.tab_label = tab_label
- vbox = gtk.VBox()
- self.btnConflict = gtk.Button()
- icon = gtk.image_new_from_stock(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_SMALL_TOOLBAR)
- self.btnConflict.add(icon)
- self.btnConflict.set_no_show_all(True)
- vbox.add(self.btnConflict)
- self.conflictIcon = vbox
- self.btnConflict.connect('clicked', self.on_btnConflict_clicked)
- icon.show()
- self.constraints = _[1]
- self.conflicts = set()
- self.conflict_message = ''
-
-
- def enable(self, enabled = True):
- self.selector.set_sensitive(enabled)
- self.enabled = enabled
-
-
- def disable(self):
- self.enable(False)
-
-
- def is_enabled(self):
- return self.enabled
-
-
- def get_current_value(self):
- raise NotImplemented
-
-
- def is_changed(self):
- return self.get_current_value() != self.option.defchoice
-
-
- def writeback(self):
- if self.enabled:
- self.ppd.markOption(self.option.keyword, self.get_current_value())
-
-
-
- def checkConflicts(self, update_others = True):
- value = self.get_current_value()
- for constraint in self.constraints:
- if constraint.option1 == self.option.keyword:
- option2 = self.gui.options.get(constraint.option2, None)
- choice1 = constraint.choice1
- choice2 = constraint.choice2
- else:
- option2 = self.gui.options.get(constraint.option1, None)
- choice1 = constraint.choice2
- choice2 = constraint.choice1
- if option2 is None:
- continue
-
- if choice1 == value and option2.get_current_value() == choice2:
- self.conflicts.add(constraint)
- if update_others:
- option2.checkConflicts(update_others = False)
-
- update_others
- if constraint in self.conflicts:
- self.conflicts.remove(constraint)
- option2.checkConflicts(update_others = False)
- continue
-
- tooltip = [
- _('Conflicts with:')]
- for c in self.conflicts:
- if c.option1 == self.option.keyword:
- option = self.gui.options.get(c.option2)
- else:
- option = self.gui.options.get(c.option1)
- tooltip.append(option.option.text)
-
- tooltip = '\n'.join(tooltip)
- self.conflict_message = tooltip
- if self.conflicts:
- self.btnConflict.set_tooltip_text(tooltip)
- self.btnConflict.show()
- else:
- self.btnConflict.hide()
- self.gui.option_changed(self)
- return self.conflicts
-
-
- def on_change(self, widget):
- self.checkConflicts()
-
-
- def on_btnConflict_clicked(self, button):
- parent = self.btnConflict
- while parent != None and not isinstance(parent, gtk.Window):
- parent = parent.get_parent()
- dialog = gtk.MessageDialog(parent, gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_CLOSE, self.conflict_message)
- dialog.run()
- dialog.destroy()
-
-
-
- class OptionBool(Option):
-
- def __init__(self, option, ppd, gui, tab_label = None):
- self.selector = gtk.CheckButton(ppdippstr.ppd.get(option.text))
- self.label = None
- self.false = u'False'
- self.true = u'True'
- for c in option.choices:
- if c['choice'] in ('None', 'False', 'Off'):
- self.false = c['choice']
-
- if c['choice'] in ('True', 'On'):
- self.true = c['choice']
- continue
-
- self.selector.set_active(option.defchoice == self.true)
- self.selector.set_alignment(0, 0.5)
- self.selector.connect('toggled', self.on_change)
- Option.__init__(self, option, ppd, gui, tab_label = tab_label)
-
-
- def get_current_value(self):
- return (self.false, self.true)[self.selector.get_active()]
-
-
-
- class OptionPickOne(Option):
- widget_name = 'OptionPickOne'
-
- def __init__(self, option, ppd, gui, tab_label = None):
- self.selector = gtk.combo_box_new_text()
- label = ppdippstr.ppd.get(option.text)
- if not label.endswith(':'):
- label += ':'
-
- self.label = gtk.Label(label)
- self.label.set_alignment(0, 0.5)
- selected = None
- for nr, choice in enumerate(option.choices):
- self.selector.append_text(ppdippstr.ppd.get(choice['text']))
- if option.defchoice == choice['choice']:
- selected = nr
- continue
-
- if selected is not None:
- self.selector.set_active(selected)
- else:
- print option.text, 'unknown value:', option.defchoice
- self.selector.connect('changed', self.on_change)
- Option.__init__(self, option, ppd, gui, tab_label = tab_label)
-
-
- def get_current_value(self):
- return self.option.choices[self.selector.get_active()]['choice']
-
-
-
- class OptionPickMany(OptionPickOne):
- widget_name = 'OptionPickMany'
-
- def __init__(self, option, ppd, gui, tab_label = None):
- raise NotImplemented
- Option.__init__(self, option, ppd, gui, tab_label = tab_label)
-
-
-